

package classes;


import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class WebApp extends HttpServlet {
    
  protected void myProcess(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException,NullPointerException
  {
   
    Context context = null;
    
    Context mycontext = null;
    
    //Recupero i valori che mi servono dalla request
    String input = request.getParameter("result").toString();
        
    //c1 contatore dei punti del poligono disegnato
    String c1 = request.getParameter("cont1");
      
    //da strina lo trasformo in intero
    int cont1 = Integer.parseInt(c1);
    
    //larghezza del div container
    String lar = request.getParameter("wid");
      
    //da strina lo trasformo in intero
    int larghezza = Integer.parseInt(lar);
    
    //altezza del div container
    String alt = request.getParameter("hei");
      
    //da strina lo trasformo in intero
    int altezza = Integer.parseInt(alt);
        
     //creo un istanza della classe converter (mi serve per recuperare i dati e per poi passarli in output nel formato svg)
    //Converter conv=new Converter();
    
     //F creo un istanza della classe converter (mi serve per recuperare i dati e per poi passarli in output nel formato svg)
    Converter myconv=new Converter();
    
        
    //passo i dati presi dalla request al metodo textToObject che mi restituisce dataIn che è un array di shape contenente il poligono in input
    //Data dataIn=conv.textToObject(input,cont1); 
       
    //F passo i dati presi dalla request al metodo textToObject che mi restituisce dataIn che è un array di shape contenente il poligono in input
    Data mydataIn=myconv.textToObject(input,cont1);
    
    
    //creo un istanza dell'algoritmo che mi implementa l'interfaccia Algorithm
    //context = new Context(new ConvexPolygonsExtreme());
    
    //creo un istanza dell'algoritmo che mi implementa l'interfaccia Algorithm
    mycontext = new Context(new voronoidiagram(larghezza, altezza));
              
    
    //eseguo l'algoritmo passandogli dataIn e ottengo il risultato in dataOut  
    //Data dataOut = context.execute(dataIn);
    
    Data dataOut2 = mycontext.execute(mydataIn);
    
    response.setContentType("image/svg+xml;charset=UTF-8"); //specifica il formato del dato RESPONSE da restituire
    
    // Set standard HTTP/1.1 no-cache headers.
    response.setHeader("Cache-Control", "private, no-store, no-cache, must-revalidate");

    // Set standard HTTP/1.0 no-cache header.
    response.setHeader("Pragma", "no-cache");
    
    
      if (!mycontext.getConvex()) {   // restitusce -1 se il poligono non era convesso 
        int convex=-1;
        PrintWriter out = response.getWriter();
        out.println(convex);  
        out.close();
     }  
    
      else{  
         //se il poligono era convesso, mando il risultato ell'esecuzione a dataToSvg che lo trasforma in Svg
         String output = myconv.dataToSvg(dataOut2);
         PrintWriter out = response.getWriter();
         out.println(output); // ritorno al client il risultato in formato svg
         out.close();
    }
    
  }
  
  
  
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        myProcess(request, response);
    } 

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        myProcess(request, response);
    }

   
}

